# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds
#FROM findepi/graalvm:java17-native

# 指定镜像的维护者
LABEL maintainer="Lion Li"

# 创建必要的目录结构，用于存放日志文件、临时文件和SkyWalking的agent
RUN mkdir -p /ruoyi/server/logs \
    /ruoyi/server/temp \
    /ruoyi/skywalking/agent

# 设置工作目录为服务器目录
WORKDIR /ruoyi/server

# 设置服务器端口、语言和字符集环境变量，并预留JAVA_OPTS变量供外部定制Java选项
ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""

# 将服务器端口暴露给外部
EXPOSE ${SERVER_PORT}

# 将构建目标文件添加到镜像中并重命名为app.jar
ADD ./target/ruoyi-admin.jar ./app.jar

# 设置容器启动时执行的命令，使用Java运行app.jar
# -Djava.security.egd=file:/dev/./urandom: 解决Java安全问题，提供足够的随机性
# -Dserver.port=${SERVER_PORT}: 根据环境变量设置服务端口
# -XX:+HeapDumpOnOutOfMemoryError: 在遇到内存溢出时生成堆转储文件
# -XX:+UseZGC: 使用ZGC垃圾收集器，优化垃圾回收性能
# ${JAVA_OPTS}: 允许外部通过环境变量定制Java启动参数
# -jar app.jar: 运行应用
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
           # 应用名称 如果想区分集群节点监控 改成不同的名称即可
           #-Dskywalking.agent.service_name=ruoyi-server \
           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
           -jar app.jar

